স্প্রিং বুট ক্লায়েন্টের টেস্টিং করতে হলে সাধারণত আপনি REST API কলগুলোর সঠিক কার্যকারিতা এবং ফলাফল নিশ্চিত করতে MockWebServer, MockRestServiceServer, অথবা WebClient-এর টেস্টিং ফ্রেমওয়ার্ক ব্যবহার করবেন।
১. MockWebServer ব্যবহার করে টেস্টিং
MockWebServer হলো একটি টুল যা API কলগুলিকে মক করার জন্য ব্যবহৃত হয়। এটি সহজেই HTTP সার্ভার সিমুলেট করতে পারে।
Maven ডিপেন্ডেন্সি
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>mockwebserver</artifactId>
<scope>test</scope>
</dependency>
পর্যায়ক্রমিক ধাপ:
Step 1: WebClient কনফিগার করা
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.client.WebClient;
@Configuration
public class WebClientConfig {
@Bean
public WebClient webClient(WebClient.Builder builder) {
return builder.build();
}
}
Step 2: সার্ভিস ক্লাস তৈরি
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
@Service
public class ApiService {
@Autowired
private WebClient webClient;
public String getApiResponse(String url) {
return webClient.get()
.uri(url)
.retrieve()
.bodyToMono(String.class)
.block(); // For synchronous testing
}
}
Step 3: টেস্ট কেস লেখা
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import static org.junit.jupiter.api.Assertions.assertEquals;
@SpringBootTest
public class ApiServiceTest {
@Autowired
private ApiService apiService;
private MockWebServer mockWebServer;
@BeforeEach
void setUp() throws Exception {
mockWebServer = new MockWebServer();
mockWebServer.start();
}
@AfterEach
void tearDown() throws Exception {
mockWebServer.shutdown();
}
@Test
void testGetApiResponse() {
// Mock response
mockWebServer.enqueue(new MockResponse()
.setBody("{\"message\":\"Hello, World!\"}")
.addHeader("Content-Type", "application/json"));
String baseUrl = mockWebServer.url("/").toString();
String response = apiService.getApiResponse(baseUrl);
// Assertion
assertEquals("{\"message\":\"Hello, World!\"}", response);
}
}
২. MockRestServiceServer ব্যবহার করে টেস্টিং
MockRestServiceServer হল Spring Framework-এর একটি টুল, যা RestTemplate টেস্ট করতে ব্যবহৃত হয়।
Step 1: RestTemplate কনফিগার
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
Step 2: সার্ভিস ক্লাস তৈরি
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
@Service
public class RestTemplateService {
@Autowired
private RestTemplate restTemplate;
public String getApiResponse(String url) {
return restTemplate.getForObject(url, String.class);
}
}
Step 3: টেস্ট কেস লেখা
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.client.MockRestServiceServer;
import org.springframework.web.client.RestTemplate;
import static org.springframework.test.web.client.match.MockRestRequestMatchers.requestTo;
import static org.springframework.test.web.client.response.MockRestResponseCreators.withSuccess;
import static org.junit.jupiter.api.Assertions.assertEquals;
@SpringBootTest
public class RestTemplateServiceTest {
@Autowired
private RestTemplate restTemplate;
@Autowired
private RestTemplateService restTemplateService;
private MockRestServiceServer mockServer;
@BeforeEach
void setUp() {
mockServer = MockRestServiceServer.createServer(restTemplate);
}
@Test
void testGetApiResponse() {
// Mock response
String mockResponse = "{\"message\":\"Hello, RestTemplate!\"}";
mockServer.expect(requestTo("http://mock-api.com"))
.andRespond(withSuccess(mockResponse, org.springframework.http.MediaType.APPLICATION_JSON));
String response = restTemplateService.getApiResponse("http://mock-api.com");
// Assertion
assertEquals("{\"message\":\"Hello, RestTemplate!\"}", response);
}
}
৩. WebTestClient ব্যবহার করে টেস্টিং
WebTestClient একটি রিয়াক্টিভ টেস্ট টুল, যা WebClient-সহ অন্যান্য রিয়াক্টিভ স্ট্যাক টেস্ট করার জন্য ব্যবহৃত হয়।
Step 1: টেস্ট ক্লাসে WebTestClient Bean যোগ করা
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.reactive.server.WebTestClient;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class WebClientIntegrationTest {
@Autowired
private WebTestClient webTestClient;
@Test
void testGetApi() {
webTestClient.get().uri("/api/endpoint")
.exchange()
.expectStatus().isOk()
.expectBody(String.class)
.isEqualTo("{\"message\":\"Hello, WebClient!\"}");
}
}
উপসংহার
- MockWebServer: WebClient বা যেকোনো HTTP ক্লায়েন্ট টেস্ট করার জন্য।
- MockRestServiceServer: RestTemplate টেস্ট করার জন্য।
- WebTestClient: রিয়াক্টিভ স্ট্যাক বা WebClient টেস্ট করার জন্য।
এই পদ্ধতিগুলি ব্যবহার করে আপনি স্প্রিং বুট ক্লায়েন্টের কার্যকারিতা নির্ভরযোগ্যভাবে টেস্ট করতে পারবেন।
Read more